package com.gitee.wsl.ext.array.bytes

import com.gitee.wsl.ext.array.bytes.updateUseLittleEndian
import com.gitee.wsl.ext.bitcode.ushr
import com.gitee.wsl.lang.ByteOrder


/**
 * @return a short as a byte array in little endian format
 */
//fun Short.toByteArray(): ByteArray = byteArrayOf(
//    this.toByte(),
//    (this.toInt() ushr 8).toByte(),
//)

/**
 * @return a short from a byte array in little endian format
 */
//fun ByteArray.toShort(): Short = toInt().toShort()

fun Short.toByteArray(byteOrder: ByteOrder = ByteOrder.BigEndian): ByteArray{
    val bytes = ByteArray(Short.SIZE_BYTES)
    toByteArray(bytes,byteOrder,0)
    return bytes
}

fun Short.toByteArray(byteArray: ByteArray,byteOrder: ByteOrder= ByteOrder.BigEndian,startIndex:Int=0){
    val tempInt = toInt()
    byteArray.updateUseLittleEndian(byteOrder,startIndex,Short.SIZE_BYTES){index->
        (tempInt ushr 8*index).toByte()
    }
}

fun ByteArray.toShort(order: ByteOrder = ByteOrder.BigEndian,startIndex: Int = 0): Short
{
    var value = 0
    getUseLittleEndian(order,startIndex, Short.SIZE_BYTES) { index, byte -> value = value or (byte.toUByte().toInt() shl 8 * index) }
    return value.toShort()
}